package com.cqhilink.iot.jobstandardmanagement.dao.mapper;

import com.cqhilink.iot.jobstandardmanagement.facade.model.*;

import java.util.List;
import java.util.Map;

/**
 * 人员信息
 */
public interface EmployeeMapper {

    /**
     * @param employee 根据条件查询 人员信息 { 主要用于组织查询人 和 部门查询人信息 }
     */
    List<Employee> selectListEmploye(Employee employee);

    /**
     * 根据ID集合查询数据
     *
     * @param list
     * @return
     */
    List<Employee> selectByKeyList(List<String> list);

    /**
     * 删除人员信息
     *
     * @param employeeId
     * @return
     */
    int deleteByPrimaryKey(String employeeId);

    /**
     * 新增人员信息
     *
     * @param record
     * @return
     */
    int insert(Employee record);

    /**
     * 新增人员信息
     *
     * @param record
     * @return
     */
    int insertSelective(Employee record);

    /**
     * 查询人员信息
     *
     * @param employeeId
     * @return
     */
    EmployeeVo selectByPrimaryKey(String employeeId);

    /**
     * 修改人员信息
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(Employee record);

    /**
     * 修改人员信息
     *
     * @param record
     * @return
     */
    int updateByPrimaryKey(Employee record);

    /**
     * 查询人员信息
     *
     * @param employee
     * @return
     */
    List<EmployeeVo> selectEmployeeList(Employee employee);

    /**
     * 分页查询人员信息
     *
     * @param bootstrapSearchBean
     * @return
     */
    List<EmployeeVo> queryList(BootstrapSearchBean bootstrapSearchBean);

    /**
     * 查询人员信息返回条数
     *
     * @param bootstrapSearchBean
     * @return
     */
    Integer queryCount(BootstrapSearchBean bootstrapSearchBean);

    /**
     * 修改人员信息
     *
     * @param employee
     * @return
     */
    int updateEemployee(Map employee);

    /**
     * 查询人员信息
     *
     * @param bootstrapSearchBean
     * @return
     */
    List<EmployeeVo> findList(BootstrapSearchBean bootstrapSearchBean);

    List<EmployeeVo> queryEmployeeByRoleDept(Map selectMap);

    /**
     * @param list
     * @Author 卢曼成
     * @Description 批量插入
     * @Date 2017/2/8 17:18
     */
    int insertList(List<Employee> list);

    /**
     * @param list
     * @Author 卢曼成
     * @Description 批量修改
     * @Date 2017/2/8 17:18
     */
    int updateList(List<Employee> list);

    /**
     * @param list
     * @Author 卢曼成
     * @Description 批量逻辑删除
     * @Date 2017/2/8 17:18
     */
    int deleteList(List<Employee> list);

    /**
     * @param employeeId
     * @return Employee
     * @Author 卢曼成
     * @Description 根据ID查询
     * @CreateDateTime 2017/3/15 14:53
     **/
    Employee queryByKeyId(String employeeId);

    /**
     * @param list
     * @return List<String>
     * @Author 卢曼成
     * @Description 根据ID查询数据是否存在
     */
    List<String> selectByListId(List<Employee> list);

    /**
     * @param list
     * @return List<String>
     * @Author 卢曼成
     * @Description 根据postId获取关联的用户数量
     */
    int selectByPostCount(List<String> list);

    /**
     * @param employee
     * @return int
     * @Author 卢曼成
     * @Description 验证邮箱是否重复
     */
    int isExis(Employee employee);

    /**
     * Map map {orgId=,roleId=}
     */
    List<PermissionErModel> selectEmployeeByRoleAndOrg(Map map);

    /**
     * Map map {orgId=,roleId=}
     */
    List<PermissionErModel> selectEmployeeByRoleAndDept(Map map);

    /**
     * @param roles 根据角色查询当前角色的和组织查询了人员信息
     * @return
     */
    List<Employee> getEmployeeListByRole(Roles roles);

    /**
     * 查询特殊的流程人员信息
     *
     * @param roles
     */
    List<EmployeeVo> getEmployeeListSpecialByRole(Roles roles);

    /**
     * @param roles 根据角色查询当前角色的和组织查询了人员信息
     */
    List<EmployeeVo> getEmployeeVoListByRole(Roles roles);

    /**
     * 根据条件查询数据
     *
     * @param param
     * @return
     */
    List<EmployeeVo> selectParamList(EmployeeVo param);

    /**
     * 根据组织查询性别人数集合
     *
     * @param param
     * @return
     */
    List<EmployeeVo> findOrgSexReportFormList(EmployeeVo param);

    /**
     * 根据部门查询人员报表集合
     *
     * @param param
     * @return
     */
    List<EmployeeVo> findDepReportFormList(EmployeeVo param);

    /**
     * 根据部门查询性别人数集合
     *
     * @param param
     * @return
     */
    List<EmployeeVo> findDepSexReportFormList(EmployeeVo param);

    /**
     * 批量修改组织或部门
     *
     * @param map
     * @return
     */
    int editOrg(Map<String, Object> map);

    /**
     * 查询出所有的部门负责人
     * @return
     */
    List<EmployeeVo> queryDeptManagerList(String orgId);



    /**
     * 根据当前人所属组织机构和菜单id，查询作业区下所有拥有该菜单的用户
     * @Author chenpeng
     * @return
     */
    List<Employee> queryOwnMenuConditionByOrgId(Map paramMap);

    /**
     * 查询作业区下所有角色名称为XXX的人员
     * Author:cp
     * 所需参数
     * areaOrgId
     * roleName
     * @return
     */
    List<Employee> queryEmployeeByAreaOrgIdAndRoleName(Map queryCondition);

}